#pragma once
#include <Rz/IObject.h>

namespace Rz {

template <typename T>
class IFlaggable :
	virtual public IObject
{
	public:
		RZ_RTTI_INTERFACE(Rz, IFlaggable);
		RZ_RTTI_IMPLEMENTS(IObject);
		RZ_RTTI_TEMPLATES(T);
		RZ_RTTI_END;

		RZ_INLINE virtual void SetFlag(T flag)			{ _flags |=  flag; }
		RZ_INLINE virtual void UnsetFlag(T flag)		{ _flags &= ~flag; }
		RZ_INLINE virtual bool IsFlagSet(T flag) const	{ return ((_flags & flag) == flag); }
		RZ_INLINE virtual T GetFlagsState() const		{ return _flags; }

	protected:
		IFlaggable() : _flags(T(0)) { }

	private:
		T _flags;
};

}